from TTS.api import TTS

def list_spakers(model_name):
    tts = TTS(model_name)
    if tts.speakers:
        print(f"{model_name}可用说话人ID:{tts.speakers}")
    else:
        print(f"{model_name}模型不支持多说话人或说话人信息未定义")

#list_spakers("tts_models/zh-CN/baker/tacotron2-DDC-GST")
#list_spakers("tts_models/multilingual/multi-dataset/your_tts")
#list_spakers("tts_models/multilingual/multi-dataset/xtts_v2")

cn_text = """
选择建议
优先推荐 XTTS-v2：
对于中英文混合语音和高质量音色需求，XTTS-v2 是最佳选择，无需复杂配置即可处理混合文本，且音色克隆功能强大。
轻量级场景选择多语言 VITS：
如果对速度要求较高，且能接受稍低的音色质量，可以使用多语言 VITS 模型。
极致质量选择组合模型：
如果需要针对每种语言使用最佳模型，可以组合中文和英文模型，但实现复杂度较高。
"""


def tts_cn_en():
    tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2", gpu=False)

    # generate speech by cloning a voice using default settings
    tts.tts_to_file(text=" It took me quite a long time to develop a voice, and now that I have it I'm not going to be silent.",
                    file_path="output/output.wav",
                    speaker_wav="speaker/nicole-sample.wav",
                    language="en")
    
    # generate speech by cloning a voice using default settings
    tts.tts_to_file(text=cn_text,
                    file_path="output/cn_output.wav",
                    speaker_wav="speaker/gauss-sample.wav",
                    language="zh-cn")
tts_cn_en()

def vc_to(src,target):
    vc = TTS(model_name="voice_conversion_models/multilingual/vctk/freevc24", gpu=False)
    target_path = f"speaker/{target}-sample.wav"
    vc.voice_conversion_to_file(src, file_path=f"output/vc_by_{target}_{src}", target_wav=target_path)

#vc_to("output/output.wav", "gauss")
#vc_to("output/cn_output.wav", "gauss")


#vc_to("output/output.wav", "nicole")
#vc_to("output/cn_output.wav", "nicole")

#vc_to("output/output.wav", "sunny")
#vc_to("output/cn_output.wav", "sunny")

#vc_to("output/output.wav", "gauss1")
#vc_to("output/cn_output.wav", "gauss1")
